Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++]Adres


Rekomendowane odpowiedzi

Opublikowano

Cześć. Mam problem z kodem w c++.

Chcę pobrać od użytkownika adres (cin >> zmienna), a następnie skoczyć do niego w pliku za pomocą fstream::seekg.

Problemem jest, że jeśli pobiorę go jako string, to seekg już nie skoczy, bo on stringów nie obsługuje.

Pisząc:

plik.seekg (0x12345, ios::beg)

poprawnie skacze, aczkolwiek po wstawieniu zmiennej int/string zamiast adresu jest już problem.

 

 

Czy jest możliwość, aby pobrać wartość jako adres w hex? coś a`la

cout << zmienna << hex << showbase;

tyle, że do funkcji seekg?


 

Opublikowano

int też nie, bo program go przekształca w jakis sposób i program nie skacze do tego adresu co powinien

 

vjwe.jpg

 

z testów wynika, że po daniu tam inta program zawsze zwraca 127 lub 52, ewentualnie -1, kiedy adres jest kosmiczny, niemożliwy.


 

Opublikowano
Opublikowano

Mimo wszystko, jeżeli zrobię tak:

string adres;
int adres_end;
cin >> adres;
//adres ma wartosc "0x12345"
adres_end = stringtoint(adres);//załóżmy, że napisałem sobie funkcję stringtoint
plik.seekg(adres);

to i tak nie jest tak jak powinno być.


 

Opublikowano

Próbowałem manipulatorów.

No właśnie jeszcze nie o to mi chodzi.

Bardziej pasowałby manipulator "showbase", aczkolwiek nie działa on tak jak powinien, w sumie nic nie robi.

cin >> showbase >> hex >> adres;

 

Przy podaniu przez cin "12345" powinien on przekształcić to w 0x12345, a przekształca w 74565, czyli jakby traktuje podaną wcześniej liczbę jako hex i przekształca do dec ;x


 

Opublikowano

Nie ucz ojca... Nie ogarniasz.

 

Rzecz w tym, że JEŚLI JUŻ, to powinno to przekształcić w "3039", bo 12345 po manipulatorze hex powinno przyjąć taką wartość.

Problem w tym, że działa w drugą stronę i NIE DOPISUJE bazy, czyli 0x na początku adresu.

 

 

Może ogarniesz jak napiszę inaczej.

    unsigned n = 9;
   cout << hex << showbase << n;

Ten kod, wyświetla 0x9, czyli to czego potrzebuję, adres w hex, z bazą.

 

JEDNAKŻE, jeśli zrobię już tak:

 

    unsigned adres;
cin >> hex >> showbase >> adres;
   cout << adres;

 

to wyświetla już tylko 9.


 

Opublikowano

A na kiego boga potrzeba ci tego "0x" ?

 

Używasz tej wartości w seekg jako int'a ( mniej więcej ).

Przekazujesz wartość jako int.

 

Przedrostek "0x" to tylko i wyłącznie estetyka stworzona dla programisty. CPU absolutnie wszystko jedno [ chyba, że przekazujesz string, czego NIE ROBISZ ].

 

 

@EDIT

Ja pierdolę. Spojrzałem na liczby które podałeś @UP. Ty się naprawdę doucz i przeczytaj kilka tutów.

 

 

int main() {

unsigned adres;

 

while (true){

std::cin >> std::dec >> adres; //////// JEŚLI TUTAJ JEST STD::DEC TO INTERPRETUJE LICZBE JAKO DZIESIĘTNĄ

///////////////// JEŚLI STD::HEX TO JAKO SZESNASTKOWĄ

std::cout << "hex: " << std::hex << adres << " dec: " << std::dec << adres << std::endl;

}

}

 

 

Ta sygnatura jest pusta.

Opublikowano

Nie rozumiesz chyba. Skoro manipulator hex ma przekształcić liczbę z dec na hex, to kurwa po daniu do zmiennej 12345 powinien przekształcić ją w 3039, a nie 74565. ;f

 

Anyway.

 

Zrobiłem jak mówisz, bez konwersji na hex, po prostu podaję inta z cin do seekg, aczkolwiek dziala on tylko przy adresach bardzo niskich adresach. Przykładowo, przy podaniu do cin adresu 118880 wyświetla 68 (44 w hex), a naprawdę w tym miejscu jest 7C (hex).

 

//Close na prośbę autora z raportu.


 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...